<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 正则表达式 也是一个特殊的对象 => 存在属性和方法
    // var reg = /day/ig;  
    // var reg = new RegExp("day","ig")
    // console.log(reg);
    // console.dir(reg);  // 以键值对形式打印对象

    // 属性:
    // source      (了解)正则表达式中表达式对应的字符串
    // flags       (了解)正则表达式中修饰符对应的字符串
    // ignoreCase  是否忽略大小写(修饰符中是否有i)
    // global      是否忽略全局匹配(修饰符中是否有g)
    // lastIndex   检索(匹配)开始的位置  => 正则表达式检索字符串时,默认从0开始检索


    // 方法:
    // test()   检索字符串(用既定的规则匹配字符串), 判断字符串中是否存在符合规则的内容 (常用于表单验证)  存在 => true  不存在=> false
    // exec()   检索字符串(用既定的规则匹配字符串), 判断字符串中是否存在符合规则的内容,将符合规则的内容提取出来放到数组中 (常用于字符串匹配)  存在 => []  不存在=> null

    // 语法: 正则.test(字符串)     正则.exec(字符串)  

    // var str = "good good study , day day up";
    // var reg = /day/; // 匹配 'day'
    // console.log(reg.lastIndex, reg.test(str));

    // var str = "good good study , Day dAy up";
    // var reg = /day/i; // 忽略大小写  D|d A|a Y|y  => 8种 只要包含匹配模式中的一种即可
    // console.log(reg.lastIndex, reg.test(str));
    // console.log(reg.lastIndex, reg.test(str));
    // console.log(reg.lastIndex, reg.test(str));
    // console.log(reg.lastIndex, reg.test(str));
    // console.log(reg.lastIndex, reg.test(str));
    // console.log(reg.lastIndex, reg.test(str));


    // 关于修饰符g
    // 如果不添加修饰符g, 默认从字符串开头匹配 (lastIndex = 0)
    // 如果添加了修饰符g, 默认从字符串开头匹配 (lastIndex = 0),如果能匹配到就返回true,并记录下次匹配开始的位置(上次匹配结束的后一位), 下次匹配时,继续向后匹配, 直到匹配不到为止(匹配不到 返回false, lastIndex重置为0)

    // var str = "good good study , Day dAy up";
    // var reg = /day/ig; // 忽略大小写 全局匹配
    
    // console.log(reg.lastIndex, reg.test(str)); // 0 true    => lastIndex = 21
    // console.log(reg.lastIndex, reg.test(str)); // 21 true   => lastIndex = 25
    // console.log(reg.lastIndex, reg.test(str)); // 25 false  => lastIndex = 0
    // console.log(reg.lastIndex);

    // console.log(reg.lastIndex, reg.test(str)); // 0 true    => lastIndex = 21
    // console.log(reg.lastIndex, reg.test(str)); // 21 true   => lastIndex = 25
    // console.log(reg.lastIndex, reg.test(str)); // 25 false  => lastIndex = 0
    // console.log(reg.lastIndex);


    // 应用: 字符串中存在几个day(忽略大小写)
    // var str = "good good study , Day dAy up";
    // var reg = /day/ig; // 忽略大小写 全局匹配

    // var count = 0;
    // while(reg.test(str)){  // reg.test(str) => true (计数)    false(跳出)   
    //     count++; // 计算  
    // }
    // console.log(count);


    // exec()   检索字符串(用既定的规则匹配字符串), 判断字符串中是否存在符合规则的内容,将符合规则的内容提取出来放到数组中(只提取一个) (常用于字符串匹配)  存在 => []  不存在=> null


    // var str = "good good study , day day up";
    // var reg = /day/; // 匹配 'day'
    // console.log(reg.lastIndex, reg.exec(str));

    // var str = "good good study , Day dAy up";
    // var reg = /day/i; // 忽略大小写  D|d A|a Y|y  => 8种 只要包含匹配模式中的一种即可
    // console.log(reg.lastIndex, reg.exec(str));
    // console.log(reg.lastIndex, reg.exec(str));
    // console.log(reg.lastIndex, reg.exec(str));
    // console.log(reg.lastIndex, reg.exec(str));
    // console.log(reg.lastIndex, reg.exec(str));
    // console.log(reg.lastIndex, reg.exec(str));


    // 关于修饰符g
    // 如果不添加修饰符g, 默认从字符串开头匹配 (lastIndex = 0)
    // 如果添加了修饰符g, 默认从字符串开头匹配 (lastIndex = 0),如果能匹配到就将匹配的内容存放到数组,并记录下次匹配开始的位置(上次匹配结束的后一位), 下次匹配时,继续向后匹配, 直到匹配不到为止(匹配不到 null, lastIndex重置为0)

    // var str = "good good study , Day dAy up";
    // var reg = /day/ig; // 忽略大小写 全局匹配
    
    // console.log(reg.lastIndex, reg.exec(str)); // 0 true    => lastIndex = 21
    // console.log(reg.lastIndex, reg.exec(str)); // 21 true   => lastIndex = 25
    // console.log(reg.lastIndex, reg.exec(str)); // 25 false  => lastIndex = 0
    // console.log(reg.lastIndex);



    // exec每次只匹配一个 => 将所有匹配的内容放到一整个数组中
    var str = "good good study , Day dAy up";
    var reg = /day/ig; // 忽略大小写 全局匹配

    var arr = [];
    var res = null;
    while(res = reg.exec(str)){  // 先执行reg.exec(str) => 数组/ null => 再将结果赋值给变量res => 最后将res作为循环的表达式(条件)    res是数组 => true   res是null=> false  
        console.log(res); 
        arr.push(res[0]);

    }
    console.log(arr);
    

    // var a = null
    // if(a = true){
    //     console.log(1111);
    // }else{
    //     console.log(2222);
    // }



</script>
</html>